package com.sunedai.tiger.dao.system;

import com.sunedai.tiger.dao.system.entity.Role;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 角色dao层
 * @author zhaolipeng
 */
@Repository
public interface RoleDao extends PagingAndSortingRepository<Role, Long> {

  /**
   * 保存或更新角色实体
   * @param role -- 角色实体
   * @return 新的角色实体
   */
  @Override
  Role save(Role role);

  /**
   * 通过id查找角色
   * @param id -- 标识
   * @return 角色实体
   */
  @Override
  Optional<Role> findById(Long id);

  /**
   * 统计所有角色的总数
   * @return 总数
   */
  @Override
  long count();

  /**
   * 查找所有角色
   * @param pageable -- 分页信息
   * @return 角色结合
   */
  @Override
  Page<Role> findAll(Pageable pageable);

  /**
   * 通过用户标识查找用户角色
   * @param usrId -- 用户标识
   * @return 角色集合
   */
  @Query("select empUsrToRole.role from EmpUsrToRole empUsrToRole where empUsrToRole.empUsr.id=:usrId")
  List<Role> findUsrRoles(@Param("usrId") Long usrId);

  /**
   * 删除角色
   * @param role -- 角色实体
   */
  @Override
  void delete(Role role);
}
